﻿using AutoMapper;
using B.S.Filtration.Domain.到货检验;
using B.S.Filtration.ErrorCode;
using B.S.Filtration.Read.Api.Application.Command.到货检验.QualityReportWorkCommand;
using MediatR;
using SqlSugar;

namespace B.S.Filtration.Read.Api.Application.CommandHander.到货检验.QualityReportWorkHandler
{
    ///GetQualityReportWorkHandler：这是一个处理 GetQualityReportWorkCommand 请求的类，继承自 IRequestHandler 接口。
    public class GetQualityReportWorkHandler:IRequestHandler<GetQualityReportWorkCommand,APIResult<APIPaging<QualityReportWork>>>
    {
        //ISqlSugarClient：这是一个用于数据库操作的客户端，提供了对数据库的访问和操作功能。
        private readonly ISqlSugarClient db;
        //IMapper：这是 AutoMapper 库 的核心接口，用于对象映射。
        private readonly IMapper mapper;
        //构造函数：GetQualityReportWorkHandler，接收两个参数 db 和 mapper。
        public GetQualityReportWorkHandler(ISqlSugarClient db, IMapper mapper)
        {
            //将传入的 db 和 mapper 参数赋值给类的私有字段。
            this.db = db;
            //将传入的 mapper 参数赋值给类的私有字段。
            this.mapper = mapper;
        }
        /// Handle方法：处理GetQualityReportWorkCommand请求
        /// 返回类型为 APIResult<APIPaging<QualityReportWork>>，表示封装了分页数据的 API 响应。
        public async Task<APIResult<APIPaging<QualityReportWork>>> Handle(GetQualityReportWorkCommand request, CancellationToken cancellationToken)
        {
            //创建一个APIResult对象，类型为APIPaging<QualityReportWork>
            APIResult<APIPaging<QualityReportWork>> result = new APIResult<APIPaging<QualityReportWork>>();
            //使用SqlSugar查询QualityReportWork表中IsDel为false的记录
            var model = await db.Queryable<QualityReportWork>().Where(x => !x.IsDel).ToListAsync();
            //总记录数
            int totalCount = model.Count();
            //总页数
            int PageCount = (int)Math.Ceiling(totalCount * 1.0 / request.pageSize);
            //按QualityReportWorkid降序排序，并进行分页
            //skip:挑过前面（页吗-1）*每页大小条记录
            //Take:取当前页的Pagesize条记录
            model = model.OrderByDescending(a => a.QualityReportWorkid).Skip((request.pageindex - 1) * request.pageSize).Take(request.pageSize).ToList();
            //创建 APIPaging 对象，包含总记录数、总页数和当前页数据列表。
            APIPaging<QualityReportWork> paging = new APIPaging<QualityReportWork>()
            {
                TotalCount = totalCount,
                TotalPage = PageCount,
                list = model.ToList()
            };
            //将结果赋值给 result 对象的 data 属性
            result.code = APIResultCode.success;
            //将 result 对象的 msg 属性设置为 "显示成功"
            result.msg = "显示成功";
            //将结果赋值给 result 对象的 data 属性
            result.data = paging;
            //返回 result 对象
            return result;
        }
    }
}
